;===============================================================
;导出
;---------------------------------------------------------------
global _start
global SELECTOR_CODE
global SELECTOR_DATA
global SELECTOR_VIDEO
global SELECTOR_TSS
;===============================================================
;导入
;---------------------------------------------------------------
extern arch_main
extern moos_main
extern gdtPtr
extern idtPtr
extern KERNEL_STACK_BASE
;===============================================================
;数据段
;---------------------------------------------------------------
[section .data]
align 32
[bits 32]
SELECTOR_CODE       equ     8
SELECTOR_DATA       equ     16
SELECTOR_VIDEO      equ     24
SELECTOR_TSS        equ     32
;===============================================================
;未初始化堆栈段
;---------------------------------------------------------------
[section .bss]
align 32
[bits 32]
;===============================================================
;代码段
;---------------------------------------------------------------
[section .text.entry]
align 32
[bits 32]
_start:
    sgdt [gdtPtr]
    call arch_main
    lgdt [gdtPtr]
    lidt [idtPtr]

    jmp .MOOS_MAIN
.MOOS_MAIN:
    xor eax, eax
    mov ax, SELECTOR_DATA
    mov es, ax
    mov fs, ax
    mov ss, ax
    mov esp, KERNEL_STACK_BASE

    mov ax, SELECTOR_VIDEO
    mov gs, ax
    mov ax, SELECTOR_TSS
    ltr ax

    call moos_main
    jmp $

    